package cn.cscb.mms.server.mapper;

import cn.cscb.mms.pojo.dto.ManagerTaskInfoDTO;
import cn.cscb.mms.pojo.entity.TaskInfo;
import cn.cscb.mms.pojo.vo.ManagerTaskInfoVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;

/**
 * 营销统计
 *
 * @author Gao Yipeng
 */
public interface StatisticMapper extends BaseMapper<TaskInfo> {

    /**
     * 统计客户经理名下营销任务的各种状态
     *
     * @param managerTaskInfoDTO 入参包括：客户经理工号、统计起始时间、统计结束时间
     * @return 统计结果
     */
    ManagerTaskInfoVO selectStatistic(ManagerTaskInfoDTO managerTaskInfoDTO);

    /**
     * 统计所有客户经理名下营销任务的各种状态并按面访数降序排序
     *
     * @param dto  入参包括：排序字段、统计起始时间、统计结束时间
     * @param page 分页参数
     * @return 统计结果列表
     */
    IPage<ManagerTaskInfoVO> selectAllOrderByMeets(@Param("dto") ManagerTaskInfoDTO dto, IPage<ManagerTaskInfoVO> page);

    /**
     * 统计所有客户经理名下营销任务的各种状态并按电访数降序排序
     *
     * @param dto  入参包括：排序字段、统计起始时间、统计结束时间
     * @param page 分页参数
     * @return 统计结果列表
     */
    IPage<ManagerTaskInfoVO> selectAllOrderByPhones(@Param("dto") ManagerTaskInfoDTO dto, IPage<ManagerTaskInfoVO> page);

    /**
     * 统计所有客户经理名下营销任务的各种状态并按营销贷款额降序排序
     *
     * @param dto  入参包括：排序字段、统计起始时间、统计结束时间
     * @param page 分页参数
     * @return 统计结果列表
     */
    IPage<ManagerTaskInfoVO> selectAllOrderByLoans(@Param("dto") ManagerTaskInfoDTO dto, IPage<ManagerTaskInfoVO> page);

    /**
     * 统计所有客户经理名下营销任务的各种状态并按营销存款数降序排序
     *
     * @param dto  入参包括：排序字段、统计起始时间、统计结束时间
     * @param page 分页参数
     * @return 统计结果列表
     */
    IPage<ManagerTaskInfoVO> selectAllOrderByDeposits(@Param("dto") ManagerTaskInfoDTO dto, IPage<ManagerTaskInfoVO> page);

    /**
     * 统计所有客户经理名下营销任务的各种状态并按营销任务总数降序排序
     *
     * @param dto  入参包括：排序字段、统计起始时间、统计结束时间
     * @param page 分页参数
     * @return 统计结果列表
     */
    IPage<ManagerTaskInfoVO> selectAllOrderByOwnedTasks(@Param("dto") ManagerTaskInfoDTO dto, IPage<ManagerTaskInfoVO> page);

    /**
     * 统计所有客户经理名下营销任务的各种状态并按营销成功数降序排序
     *
     * @param dto  入参包括：排序字段、统计起始时间、统计结束时间
     * @param page 分页参数
     * @return 统计结果列表
     */
    IPage<ManagerTaskInfoVO> selectAllOrderByCompletedTasks(@Param("dto") ManagerTaskInfoDTO dto, IPage<ManagerTaskInfoVO> page);

    /**
     * 统计所有客户经理名下营销任务的各种状态并按营销积分降序排序
     *
     * @param dto  入参包括：排序字段、统计起始时间、统计结束时间
     * @param page 分页参数
     * @return 统计结果列表
     */
    IPage<ManagerTaskInfoVO> selectAllOrderByPoints(@Param("dto") ManagerTaskInfoDTO dto, IPage<ManagerTaskInfoVO> page);

    /**
     * 统计客户经理的营销积分排名
     *
     * @param managerTaskInfoDTO 入参包括：客户经理工号、统计起始时间、统计结束时间
     * @return 排名
     */
    Integer selectRank(ManagerTaskInfoDTO managerTaskInfoDTO);
}
